package com.xiaolin.Thread.pool;

import java.util.concurrent.*;

/**
 * @ClassName NewSingleThreadExecutorTest
 * @Description 只有一个线程的线程池
 * @Detail detail
 * @Author MyPC
 * @Date 2020/12/1
 * @Version 1.0
 */
public class NewSingleThreadExecutorTest {
    public static void main(String[] args) {
        ExecutorService service1 = getNew1();
        for(int i=0;i<100;i++){
            // execute() 方法无返回值
            service1.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("hello");
                }
            });
        }
        // 关闭线程池
        service1.shutdown();
    }

    /**
     第一种创建方式
     int corePoolSize,  池容量
     int maximumPoolSize,  池最大容量
     long keepAliveTime,  存活时间
     TimeUnit unit,  时间单位
     BlockingQueue<Runnable> workQueue,  工作队列，是一个阻塞队列，依赖存储等待执行的线程任务
     */
    public static ExecutorService getNew1(){
        return new ThreadPoolExecutor(1, 1, 0, TimeUnit.MINUTES, new LinkedBlockingDeque<>());

    }

    /**
     第二种创建方式
     int corePoolSize,  池容量
     int maximumPoolSize,  池最大容量
     long keepAliveTime,  存活时间
     TimeUnit unit,  时间单位
     BlockingQueue<Runnable> workQueue,  工作队列，是一个阻塞队列，依赖存储等待执行的线程任务
     ThreadFactory threadFactory,  线程工厂，用来创建线程,可自定义实现
     */
    public static ExecutorService getNew2(){
        return new ThreadPoolExecutor(1, 1, 0, TimeUnit.MINUTES, new LinkedBlockingDeque<>(),Executors.defaultThreadFactory());

    }

    /**
     * 第三种创建方式
     * @return
     */
    public static ExecutorService getNew3(){
        return Executors.newSingleThreadExecutor();
    }
    /**
     * 第四种创建方式
     * @return
     */
    public static ExecutorService getNew4(){
        return Executors.newSingleThreadExecutor(Executors.defaultThreadFactory());
    }
}
